home *** CD-ROM | disk | FTP | other *** search
-
-
-
- IIIIPPPPCCCC::::::::OOOOppppeeeennnn3333((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) IIIIPPPPCCCC::::::::OOOOppppeeeennnn3333((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- IPC::Open3, open3 - open a process for reading, writing, and
- error handling
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- $pid = open3(\*WTRFH, \*RDRFH, \*ERRFH,
- 'some cmd and args', 'optarg', ...);
-
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- Extremely similar to _o_p_e_n_2(), _o_p_e_n_3() spawns the given $cmd
- and connects RDRFH for reading, WTRFH for writing, and ERRFH
- for errors. If ERRFH is '', or the same as RDRFH, then
- STDOUT and STDERR of the child are on the same file handle.
- The WTRFH will have autoflush turned on.
-
- If WTRFH begins with "<&", then WTRFH will be closed in the
- parent, and the child will read from it directly. If RDRFH
- or ERRFH begins with ">&", then the child will send output
- directly to that file handle. In both cases, there will be
- a _d_u_p(2) instead of a _p_i_p_e(2) made.
-
- If you try to read from the child's stdout writer and their
- stderr writer, you'll have problems with blocking, which
- means you'll want to use _s_e_l_e_c_t(), which means you'll have
- to use _s_y_s_r_e_a_d() instead of normal stuff.
-
- _o_p_e_n_3() returns the process ID of the child process. It
- doesn't return on failure: it just raises an exception
- matching /^open3:/.
-
- WWWWAAAARRRRNNNNIIIINNNNGGGG
- It will not create these file handles for you. You have to
- do this yourself. So don't pass it empty variables
- expecting them to get filled in for you.
-
- Additionally, this is very dangerous as you may block
- forever. It assumes it's going to talk to something like
- bbbbcccc, both writing to it and reading from it. This is
- presumably safe because you "know" that commands like bbbbcccc
- will read a line at a time and output a line at a time.
- Programs like ssssoooorrrrtttt that read their entire input stream
- first, however, are quite apt to cause deadlock.
-
- The big problem with this approach is that if you don't have
- control over source code being run in the child process, you
- can't control what it does with pipe buffering. Thus you
- can't just open a pipe to cat -v and continually read and
- write a line from it.
-
-
-
-
-
-
- Page 1 (printed 10/23/98)
-
-
-
-
-
-
- IIIIPPPPCCCC::::::::OOOOppppeeeennnn3333((((3333)))) 22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) IIIIPPPPCCCC::::::::OOOOppppeeeennnn3333((((3333))))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 2 (printed 10/23/98)
-
-
-
-
-
-
-